Embedded systems often perform dedicated functions within larger mechanical or electrical systems, such as cars, telephones, modems, robots, appliances, toys, security systems, pacemakers, televisions, set-top boxes, digital watches, or the like. Most of these embedded systems include one or more processing devices executing embedded software—typically written in in C, C++, or the like—that can allow the embedded systems to perform the dedicated functions under real-time computing constraints, for example, by utilizing a real-time operating system, such as Nucleus real-time operating system (RTOS), or the like.
Since embedded software is typically developed for a small range of functionality specific to a particular hardware platform of the embedded system, verification and debugging of the corresponding embedded software can be difficult. Most verification and debugging of the embedded software is performed by downloading a compiled version of the embedded software onto a physical board implementing a prototype of the particular hardware in the embedded system. Instrumentation is often added to both the prototyped hardware and the embedded software, which can aid in the verification and debugging processes. For example, the prototyped hardware on the physical board can include hardware instrumentation, such as probes, monitoring components, or the like, which can gather information of the prototyped processing devices on the physical board, such as processor states, register values, or the like. The prototyped hardware on the physical board also can include specialize hardware to store the gathered information and route the gather information to a verification and debugging tool remote from the physical board. The embedded software also can include instrumentation code that, once compiled, can be downloaded to the physical board. This instrumentation code can include break points, or other added code that can trace and/or profile the operation of the embedded software.
The verification and debugging tool can utilize the information gathered from the instrumentation to both the hardware on the physical board and the embedded software to trace operation of the embedded software as well as to profile, such as determine coverage of the embedded software. While these techniques can help to verify and debug some of the embedded software, the added instrumentation can alter the behavior of the embedded system, for example, disrupting the real-time processor behavior, slowing down runtime operation, or the like, which can hide some problems in the embedded system.